package com.kingyea.kim.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;

/**
 * Created by wangyunfei on 2017/6/12.
 */
@Configuration
@EnableResourceServer
// @EnableResourceServer Oauth2 资源服务器的便利方法，开启了一个spring security的filter，这个filter通过一个Oauth2的token进行认证请求。使用者应该增加这个注解，并提供一个ResourceServerConfigurer类型的Bean(例如通过ResouceServerConfigurerAdapter)来指定资源(url路径和资源id)的细节。为了利用这个filter，你必须在你的应用中的某些地方EnableWebSecurity，或者使用这个注解的地方，或者其他别的地方。
//@EnableResourceServer 这个注解创建了一个WebSecurityConfigurerAdapter，且自带了硬编码的order=3.在spring中，由于技术原因不能立即改变order的顺序，因此你必须在你的spring应用中避免使用order=3的其他WebSecurityConfigurerAdapter。
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Value("${kingyea.mobilepolice.security.isEnableSecurity}")
    private Boolean isEnableSecurity;

    @Override
    public void configure(HttpSecurity http) throws Exception {
        if (isEnableSecurity) {
            http
                    .csrf().disable()
                    .authorizeRequests().antMatchers("/v2/**",//swagger api json  /v2/api-docs
//                    "/swagger-resources/configuration/ui",//用来获取支持的动作
//                    "/swagger-resources",//用来获取api-docs的URI
//                    "/swagger-resources/configuration/security",//安全选项
                    "/swagger*/**","/swagger*","/druid/**","**.js","**.css","**.html","**.jpg","**.ico",
                    "/api/**", "/syssync/**", "/services/**", "/specification/**", "/test/**").permitAll().and()
                    .authorizeRequests().antMatchers("*.html").permitAll().and()
                    .authorizeRequests().anyRequest().authenticated()
                    .and().httpBasic();
        } else {
            System.out.println(" >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 未启用security " + isEnableSecurity);
            http.csrf().disable().authorizeRequests().anyRequest().permitAll();
        }
    }

//    @Configuration
//    public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
//
//        @Override
//        public void configure(WebSecurity web) throws Exception {
//            web.ignoring().antMatchers("/v2/api-docs",//swagger api json
//                    "/swagger-resources/configuration/ui",//用来获取支持的动作
//                    "/swagger-resources",//用来获取api-docs的URI
//                    "/swagger-resources/configuration/security",//安全选项
//                    "/swagger-ui.html");
//        }
//
//    }

}
